package com.mfc.builderdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btn1).setOnClickListener(this);
        findViewById(R.id.btn2).setOnClickListener(this);
        findViewById(R.id.btn3).setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn1:
                fun1();
                break;
            case R.id.btn2:
                fun2();
                break;
            case R.id.btn3:
                fun3();
                break;
            default:
                break;
        }
    }



    /**
     * 最普通的写法
     *
     */
    private void fun1() {

        /**
         * 客户告诉牛叉公司，我要这样一个模型，然后牛叉公司就告诉我老大
         * 说要这样一个模型，这样一个顺序，然后我就来制造
         */
        BenzModel benz = new BenzModel();
        //存放run的顺序
        ArrayList<String> sequence = new ArrayList<>();
        //客户要求，run的时候时候先发动引擎
        sequence.add("engine boom");
        //启动起来
        sequence.add("start");
        //开了一段就停下来
        sequence.add("stop");
        //我们把这个顺序赋予奔驰车
        benz.setSequence(sequence);
        benz.run();
    }


    private void fun2() {

        ArrayList<String> sequence  = new ArrayList<String>();  //存放run的顺序
        sequence.add("engine boom");  //客户要求，run的时候时候先发动引擎
        sequence.add("start");  //启动起来
        sequence.add("stop");  //开了一段就挺下来

        //要一个奔驰车：
        BenzBuilder benzBuilder = new BenzBuilder();
        //把顺序给这个builder类，制造出这样一个车出来
        benzBuilder.setSequence(sequence);
        //制造出一个奔驰车
        BenzModel benz = (BenzModel)benzBuilder.getCarModel();
        //奔驰车跑一下看看
        benz.run();

        //按照同样的顺序，我再要一个宝马
        BMWBuilder bmwBuilder = new BMWBuilder();
        bmwBuilder.setSequence(sequence);
        BMWModel bmw = (BMWModel)bmwBuilder.getCarModel();
        bmw.run();

    }

    private void fun3() {
        Director director = new Director();

        //2辆A类型的奔驰车
        for (int i = 0; i < 2; i++) {
            director.getABenzModel().run();
        }

        //3辆B类型的奔驰车
        for (int i = 0; i < 3; i++) {
            director.getBBenzModel().run();
        }

        //4辆C类型的宝马车
        for (int i = 0; i < 4; i++) {
            director.getCBMWModel().run();
        }
    }
}
